package com.user.common.tools;

import com.baomidou.mybatisplus.extension.service.IService;

public class LogicDeleteUtils {

    /**
     * 转换并删除指定ID的记录，这个适用于需要分表删除全信息的逻辑删除
     *
     * @param <L>           逻辑删除实体类型
     * @param <K>           可选实体类型，这里主要是用于用户信息逻辑删除
     * @param id            被删除ID
     * @param saveService   保存逻辑删除信息服务接口
     * @param deleteService 原先表真删除服务接口
     */
    public static <T, L, K> void logicDelete(Long id, L logicEntity,
                                             IService<L> saveService,
                                             IService<T> deleteService, IService<K> deleteService2) {      // 保存到逻辑删除表
        saveService.save(logicEntity);
        // 删除原始记录
        deleteService.removeById(id);
        // 如果 deleteService2 存在，则执行删除操作，这个主要是用户逻辑删是分表的删除
        deleteService2.removeById(id);
    }

    //方法重载

    /**
     * 转换并删除指定ID的记录。
     *
     * @param <L>           逻辑删除实体类型
     * @param id            被删除ID
     * @param saveService   保存逻辑删除信息服务接口
     * @param deleteService 原先表真删除服务接口
     */
    public static <T, L> void logicDelete(Long id, L logicEntity,
                                          IService<L> saveService,
                                          IService<T> deleteService) {      // 保存到逻辑删除表
        saveService.save(logicEntity);
        // 删除原始记录
        deleteService.removeById(id);
    }


}
